/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package czStvDpds.graphics3D;

import czStvDpds.graphics3D.geometry.Object3D;
import czStvDpds.graphics3D.geometry.Texture;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import org.newdawn.slick.UnicodeFont;

/**
 * Zajišťuje že funkce GL budou volané poze z jednoho vlákna.
 *
 * @author divad
 */
public interface GLSynchronizer {

    /**
     * Voláme, pokud potřebujeme v GL vytvořit texturu.
     *
     * @param texture
     * @see Texture
     */
    public void generateTexture(Texture texture);

    /**
     * Voláme, pokud chceme změnit data textury.
     *
     * @param t
     * @param data
     */
    public void changeTextureData(Texture t, ByteBuffer data, int offsetX, int offsetY, int offsetZ, int width, int height, int depth);

    /**
     * Voláme, pokud byly změněny vlastnosti textury.
     *
     * @param t
     */
    public void changedTextureProperties(Texture t);

    /**
     * Voláme, pokud potřebujeme v GL vytvořit VBO.
     *
     * @param vbo
     */
    public void generateVBO(Object3D vbo);

    /**
     * Voláme, pokud chceme změnit data objektu.
     *
     * @param t
     * @param data
     */
    public void changeVBOData(Object3D object, FloatBuffer data, int offset);

    /**
     * Voláme, pokud chceme změnit indexi polygonů objektu.
     *
     * @param t
     * @param data
     */
    public void changeVBOIndices(Object3D object, IntBuffer indices, int offset);

    /**
     * Voláme pokud chceme nahrát znaky fontu.
     *
     * @param font
     */
    public void generateGlyphs(UnicodeFont font);
}
